SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[spLiquidarEducacionPrivada]
@regimenLaboral INT,
@Agente INT, 
@Organizacion INT,
@Tipo INT, 
@idLiquidacion INT
AS


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 05-12-05 - Se quito en Select que busca si el concepto se debe liquidar o no (0 y 1) para que todo se haga por el mes de liquidacion
-- 10/07/2006 - Los parametros son obtenidos con la funcion fnObtenerValorDeParametro para la fecha correspondiente (VER LOS MINIMOS JUB. Y O. SOC.) (JAVIER)
-- 16/08/2006 - Arreglar calculo de porcentaje en Minimos Jubilarios y Obra Social (ADRIANA)
-- 18/08/2006 - Agregar Control de Maxima cantidad de Dias a Liquidar segun parametro (Jorge)
-- 17/11/2006 - Agregar Control en armado de Cursores para que tome Altas anteriores al 2005 sin Fecha de Baja 
-- 05/12/2007 - Se comento la llamada a paAsignarOrganizacionParaEstimulo porque se cambio la manera de buscar la Organizacion por la que se debe pagar
-- Por depuracion de la DB y borrado de datos en la Tb_RegistrosDeLiquidacion, tuvimos que cambiar como tomar el año a partir del cual se tienen en cuenta los Servicios no Liquidados
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SET NOCOUNT ON
SET DATEFORMAT dmy
DECLARE @AgenteL int
DECLARE @PlazaL int
DECLARE @FBajaL datetime
DECLARE @FAlta datetime
DECLARE @SueldoBasico int
DECLARE @ValorPuntoDocente float
DECLARE @SuplNoBonif float
DECLARE @Procedimiento varchar(50)
DECLARE @sqlTemp Nvarchar(2000) --Para sql dinamico
DECLARE @idConcepto int
DECLARE @idServicio int
DECLARE @LiqDesde datetime
DECLARE @LiqHasta datetime
DECLARE @DiasALiquidar int
DECLARE @mes int
DECLARE @PHastaSuplentesComunes DATETIME
DECLARE @PDesdeSuplentesComunes DATETIME
DECLARE @SituacionRevista INT
DECLARE @Liquidado BIT
DECLARE @CabeceraDeLiquidacion INT
DECLARE @ErrorX INT
DECLARE @ImporteMinimoJubilatorio DECIMAL(18,4)
DECLARE @ImporteMinimoObraSocial DECIMAL(18,4)
DECLARE @PorcentajeContribucionJubilatoria DECIMAL(18,4)
DECLARE @PorcentajeContribucionObraSocial DECIMAL(18,4)
DECLARE @PorcentajeAporteJubilatorio DECIMAL(18,4)
DECLARE @PorcentajeAporteObraSocial DECIMAL(18,4)
DECLARE @DiasMesActual INT 
DECLARE @DiasDelPeriodo INT
DECLARE @PDesde DATETIME
DECLARE @PHasta DATETIME
DECLARE @Resultado DECIMAL(18,4)
DECLARE @MesLiquidacionParaConcepto INT
DECLARE @MaximoDeDiasALiquidar INT 
DECLARE @AñoDesdeControl INT



SELECT @AñoDesdeControl = min(c.Anio) FROM tb_CabeceraDeLiquidacion C

---------------------------------------------------------------
-- VER ESTAS TABLAS.
----------------------------------------------------------------
--Delete From TEMPMinimosJubilatorios
--Delete From TEMPMinimoObraSocial
----------------------------------------------------------------
-- VER ESTAS TABLAS.
----------------------------------------------------------------

SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion
SELECT @ErrorX = NULL

SELECT @PDesde = Desde, @PHasta = Hasta, @PDesdeSuplentesComunes = DesdeSuplente, @PHastaSuplentesComunes = HastaSuplente,  @MesLiquidacionParaConcepto=Mes
	FROM tb_CabeceraDeLiquidacion 
	WHERE IdCabeceraDeLiquidacion = @CabeceraDeLiquidacion

-- Si no se especifica un agente y una organizacion se hace para todos los docentes
if @Agente is null and @Organizacion is null
begin
	print 'Agente nulo y Organizacion nula'
	-- Creo un cursor con los agente que tengan servicios para el periodo, regimenlaboral especificado
	DECLARE AgentesALiquidar cursor for

	Select Agente, case(s.FechaBaja) when null then 'Continua' else s.FechaBaja end, idPlaza, s.idServicioAgente, isnull(s.FechaBaja, @PHasta) LiqHasta --datediff(day, @Pdesde, isnull(s.FechaBaja, @PHasta)) 
	from tb_ServiciosAgentes s, tb_SubServiciosAgentes ss, tb_Plazas p
	where (( s.FechaBaja is not null and s.FechaAlta <= @PDesde and s.FechaBaja >= @PDesde) or
		(s.FechaBaja is null and s.FechaAlta <= @PDesde)) and
	s.regimenlaboral = @regimenlaboral and
	s.idServicioAgente = ss.servicioagente and
	ss.plaza = p.idPlaza and
	ss.fechaalta = (Select max(fechaalta) from tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	order by agente
end

--/////////////////////////////////////// POR ORGANIZACION ////////////////////////////////////////////////////
IF @Agente IS NULL AND @Organizacion IS NOT NULL
BEGIN
	-- Creo un cursor con los agentes que pertenecen a la organizacion que se especifica
	DECLARE AgentesALiquidar CURSOR FOR

	--SERVICIOS TITULARES Y SUPLENTES FUNCIONALES.
	SELECT Agente, S.FechaBaja, idPlaza, idServicioAgente,  ISNULL(S.FechaBaja, @PHasta) LiqHasta, s.FechaAlta, SituacionRevista, 1 Liquidado
	FROM tb_ServiciosAgentes s
	INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
	INNER JOIN tb_Plazas P ON SS.Plaza = P.IdPlaza
	INNER JOIN tb_Organizaciones O ON P.Organizacion = O.IdOrganizaciones
	INNER JOIN tb_Agentes A ON A.IdAgente = S.Agente
	WHERE (
		(S.FechaBaja IS NOT NULL AND S.FechaAlta <= @PDesde AND S.FechaBaja >= @PDesde) 
			OR
		(S.FechaBaja IS NULL AND S.FechaAlta <= @PDesde) 
			OR
		(S.FechaAlta > @PDesde AND S.FechaAlta <= @PHasta)
		) 
	AND
	S.regimenlaboral IN (12,17) 
	AND O.idOrganizaciones = @Organizacion 
	AND S.ubicacionorig = @Organizacion 
	AND SS.idSubServicio = (SELECT MAX(idSubServicio) FROM tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	-- Que no sea un servicio EXTRA SISTEMA
	AND idServicioAgente NOT IN (SELECT idServicio FROM tb_RelInterServicios Where TipoRelacion = 8)
	--AND Agente NOT IN (122828, 122304, 52810, 122962) 
	AND S.SituacionRevista IN (1,3)
	--Que el servicio ya este liquidado en una liquidacion anterior.(OJO con las simulaciones, que toma los servicios si no se simulo en el periodo anterior)
	AND IdServicioAgente IN (SELECT DISTINCT Servicio FROM tb_RegistroDeLiquidaciones INNER JOIN tb_Liquidaciones ON idLiquidacion = Liquidacion AND Tipo = @Tipo)
	
	UNION
	
	--SERVICIOS NO LIQUIDADOS TITULARES Y SUPLENTES FUNCIONALES
	SELECT Agente, S.FechaBaja, idPlaza, idServicioAgente,  ISNULL(S.FechaBaja, @PHasta) LiqHasta, s.FechaAlta, SituacionRevista, 0 Liquidado
	FROM tb_ServiciosAgentes s
	INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
	INNER JOIN tb_Plazas P ON SS.Plaza = P.IdPlaza
	INNER JOIN tb_Organizaciones O ON P.Organizacion = O.IdOrganizaciones
	INNER JOIN tb_Agentes A ON A.IdAgente = S.Agente
	WHERE 
	S.regimenlaboral IN (12,17) 
	AND O.idOrganizaciones = @Organizacion 
	AND S.ubicacionorig = @Organizacion 
	AND S.FechaAlta <= @PHasta
	AND SS.idSubServicio = (SELECT MAX(idSubServicio) FROM tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	-- Que no sea un servicio EXTRA SISTEMA
	AND idServicioAgente NOT IN (SELECT idServicio FROM tb_RelInterServicios Where TipoRelacion = 8)
	--AND Agente NOT IN (122828, 122304, 52810, 122962) 
	AND S.SituacionRevista IN (1,3)
	--Que el servicio no este liquidado en una liquidacion anterior.
	AND IdServicioAgente NOT IN (SELECT DISTINCT Servicio FROM tb_RegistroDeLiquidaciones INNER JOIN tb_Liquidaciones ON idLiquidacion = Liquidacion AND Tipo = @Tipo)
	--AND YEAR(S.FechaAlta) >= 2005	--- Cambio 17-11-2006
	--AND ((YEAR(S.FechaAlta) >= 2005) OR (YEAR(S.FechaAlta) >= 2004 AND S.FechaBaja IS NULL))  --- Cambio 09-12-2008
	--AND ((YEAR(S.FechaAlta) > 2005) OR (YEAR(S.FechaAlta) >= 2004 AND S.FechaBaja IS NULL))  -- Cambo 17-09-2010
	AND ((YEAR(S.FechaAlta) >=  @AñoDesdeControl) OR (YEAR(S.FechaAlta) >= 2004 AND S.FechaBaja IS NULL)) 



	UNION
	
	--SERVICIOS DE SUPLENTES COMUNES DEL MES ANTERIOR
	SELECT Agente, S.FechaBaja, idPlaza, idServicioAgente,  ISNULL(S.FechaBaja, @PHastaSuplentesComunes) LiqHasta, s.FechaAlta, SituacionRevista, 1 Liquidado
	FROM tb_ServiciosAgentes s
	INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
	INNER JOIN tb_Plazas P ON SS.Plaza = P.IdPlaza
	INNER JOIN tb_Organizaciones O ON P.Organizacion = O.IdOrganizaciones
	INNER JOIN tb_Agentes A ON A.IdAgente = S.Agente
	WHERE (
		(S.FechaBaja IS NOT NULL AND S.FechaAlta <= @PDesdeSuplentesComunes AND S.FechaBaja >= @PDesdeSuplentesComunes) 
			OR
		(S.FechaBaja IS NULL AND S.FechaAlta <= @PDesdeSuplentesComunes) 
			OR
		(S.FechaAlta > @PDesdeSuplentesComunes AND S.FechaAlta <= @PHastaSuplentesComunes)
	)
	AND S.regimenlaboral IN (12,17) 
	AND O.idOrganizaciones = @Organizacion 
	AND S.ubicacionorig = @Organizacion 
	AND SS.idSubServicio = (SELECT MAX(idSubServicio) FROM tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	-- Que no sea un servicio EXTRA SISTEMA
	AND idServicioAgente NOT IN (SELECT idServicio FROM tb_RelInterServicios Where TipoRelacion = 8)
	--AND Agente NOT IN (122828, 122304, 52810, 122962) 
	AND S.SituacionRevista IN (4)
	--Que el servicio ya este liquidado en una liquidacion anterior.
	AND IdServicioAgente IN (SELECT DISTINCT Servicio FROM tb_RegistroDeLiquidaciones INNER JOIN tb_Liquidaciones ON idLiquidacion = Liquidacion AND Tipo = @Tipo)	
	
	UNION
	
	--SERVICIOS DE SUPLENTES COMUNES DEL MES ANTERIOR NO LIQUIDADOS
	SELECT Agente, S.FechaBaja, idPlaza, idServicioAgente,  ISNULL(S.FechaBaja, @PHastaSuplentesComunes) LiqHasta, s.FechaAlta, SituacionRevista, 0 Liquidado
	FROM tb_ServiciosAgentes s
	INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
	INNER JOIN tb_Plazas P ON SS.Plaza = P.IdPlaza
	INNER JOIN tb_Organizaciones O ON P.Organizacion = O.IdOrganizaciones
	INNER JOIN tb_Agentes A ON A.IdAgente = S.Agente
	WHERE (
		(S.FechaBaja IS NOT NULL AND S.FechaAlta <= @PDesdeSuplentesComunes AND S.FechaBaja >= @PDesdeSuplentesComunes) 
			OR
	             (S.FechaBaja IS NOT NULL AND S.FechaAlta <= @PDesdeSuplentesComunes AND S.FechaBaja <= @PDesdeSuplentesComunes)
			OR	
		(S.FechaBaja IS NULL AND S.FechaAlta <= @PDesdeSuplentesComunes) 
			OR
		(S.FechaAlta > @PDesdeSuplentesComunes AND S.FechaAlta <= @PHastaSuplentesComunes)
	)
	AND S.regimenlaboral IN (12,17) 
	AND O.idOrganizaciones = @Organizacion 
	AND S.ubicacionorig = @Organizacion 
	AND SS.idSubServicio = (SELECT MAX(idSubServicio) FROM tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	-- Que no sea un servicio EXTRA SISTEMA
	AND idServicioAgente NOT IN (SELECT idServicio FROM tb_RelInterServicios Where TipoRelacion = 8)
	---AND Agente NOT IN (122828, 122304, 52810, 122962) 
	AND S.SituacionRevista IN (4)
	--Que el servicio no este liquidado en una liquidacion anterior.
	AND IdServicioAgente NOT IN (SELECT DISTINCT Servicio FROM tb_RegistroDeLiquidaciones INNER JOIN tb_Liquidaciones ON idLiquidacion = Liquidacion AND Tipo = @Tipo)
	--AND YEAR(S.FechaAlta) >= 2007   --'No liquida los servicios con alta en 2004 y que siguen a la fecha
	AND YEAR(S.FechaAlta) >= @AñoDesdeControl   -- Cambio 17-09-2010
	
	ORDER BY Agente
END

if @Agente is not null and @Organizacion is null
	-- Creo un cursor con el agente especificado	
	DECLARE AgentesALiquidar cursor SCROLL for
	Select Agente, s.FechaBaja, idPlaza from tb_ServiciosAgentes s, tb_SubServiciosAgentes ss, tb_Plazas p
	where (( s.FechaBaja is not null and s.FechaAlta <= @PDesde and s.FechaBaja >= @PDesde) or
		(s.FechaBaja is null and s.FechaAlta <= @PDesde)) and
	s.regimenlaboral = @regimenlaboral and
	s.idServicioAgente = ss.servicioagente and 
	ss.plaza = p.idPlaza and
	s.Agente = @Agente and
	ss.idSubServicio = (Select max(idSubServicio) from tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	order by agente	


	-- Primero los conceptos que son POR SERVICIO
	DECLARE ConceptosaLiq CURSOR SCROLL FOR 
	
	--SELECT Procedimiento, idConceptoLiquidacion FROM tb_ConceptosDeLiquidacion WHERE regimenLaboral = @regimenLaboral AND habilitado = 'S'  AND SUBSTRING(MesDePago, MONTH(@PHasta), 1) = '1' ORDER BY OrdenDeEjecucion --And And idConceptoLiquidacion In (30) idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22,20)   -- And idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22)
     	-- Actualizado 04/10/2005
	SELECT Procedimiento, idConceptoLiquidacion 
	FROM tb_ConceptosDeLiquidacion 
	WHERE regimenLaboral = @regimenLaboral 
	AND habilitado = 'S'  
	AND SUBSTRING(MesDePago, MONTH(@PHasta), 1) = '1'
	AND MomentoDeEjecucion = 1
	ORDER BY OrdenDeEjecucion

	OPEN ConceptosALiq


	DECLARE ConceptosaLiqSuplentes CURSOR SCROLL FOR 
	
	--SELECT Procedimiento, idConceptoLiquidacion FROM tb_ConceptosDeLiquidacion WHERE regimenLaboral = @regimenLaboral AND habilitado = 'S'  AND SUBSTRING(MesDePago, MONTH(@PHasta), 1) = '1' ORDER BY OrdenDeEjecucion --And And idConceptoLiquidacion In (30) idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22,20)   -- And idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22)
     	-- Actualizado 04/10/2005
	SELECT Procedimiento, idConceptoLiquidacion 
	FROM tb_ConceptosDeLiquidacion 
	WHERE regimenLaboral = @regimenLaboral 
	AND habilitado = 'S'  
	AND SUBSTRING(MesDePagoSuplentes, MONTH(@PHastaSuplentesComunes), 1) = '1' 
	AND MomentoDeEjecucion = 1
	ORDER BY OrdenDeEjecucion

	OPEN ConceptosALiqSuplentes


--/////////////////////////////////////////////// LIQUIDADOR ////////////////////////////////////////////////////
OPEN  AgentesALiquidar
FETCH NEXT FROM AgentesALiquidar INTO @AgenteL, @FBajaL, @PlazaL, @idServicio, @LiqHasta, @LiqDesde, @SituacionRevista, @Liquidado
WHILE @@FETCH_STATUS = 0
BEGIN

	DECLARE @Desde DATETIME, @Hasta DATETIME
	
	-- Si la situacion de revista es TITULAR O SUPLENTE FUNCIONAL
	IF @SituacionRevista IN (1,2,3)
	BEGIN
		IF @LiqHasta > @PHasta
			SELECT @LiqHasta = @PHasta
		IF @LiqDesde < @PDesde AND @Liquidado = 1
			SELECT @LiqDesde = @PDesde
		SELECT @DiasDelPeriodo = DATEDIFF(DAY, @PDesde, @PHasta)+1
		SELECT @Desde = @PDesde, @Hasta = @PHasta
	END
	ELSE -- Si es SUPLENTE COMUN
	BEGIN
		IF @LiqHasta > @PHastaSuplentesComunes
			SELECT @LiqHasta = @PHastaSuplentesComunes
		IF @LiqDesde < @PDesdeSuplentesComunes AND @Liquidado = 1
			SELECT @LiqDesde = @PDesdeSuplentesComunes
		SELECT @DiasDelPeriodo = DATEDIFF(DAY, @PDesdeSuplentesComunes, @PHastaSuplentesComunes)+1
		SELECT @Desde = @PDesdeSuplentesComunes, @Hasta = @PHastaSuplentesComunes
	END

	-- Comentado 05/12/2007
	--EXEC paAsignarOrganizacionParaEstimulo @CabeceraDeLiquidacion, @idServicio, @AgenteL
		
	SELECT @DiasALiquidar = DATEDIFF(DAY, @LiqDesde, @LiqHasta)+1

             -- Buscar Dias Maximos a Liquidar -- Agregado 18-08-2006
             SELECT @MaximoDeDiasALiquidar = CONVERT(INT, dbo.fnObtenerValorDeParametro ('MaximoDeDiasALiquidar', @LiqHasta))

	-- Controlar dias a Liquidar segun parametro -- Control agregado 18-08-2006
	IF @DiasALiquidar > @MaximoDeDiasALiquidar
		SELECT @DiasALiquidar = @MaximoDeDiasALiquidar 	

	-- Primero los conceptos que son POR SERVICIO
	--DECLARE ConceptosaLiq CURSOR FOR 
	
	--SELECT Procedimiento, idConceptoLiquidacion FROM tb_ConceptosDeLiquidacion WHERE regimenLaboral = @regimenLaboral AND habilitado = 'S'  AND SUBSTRING(MesDePago, MONTH(@PHasta), 1) = '1' ORDER BY OrdenDeEjecucion --And And idConceptoLiquidacion In (30) idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22,20)   -- And idConceptoLiquidacion In (32,16,10,11,13,15,25,24,22)
     	-- Actualizado 04/10/2005
	--SELECT Procedimiento, idConceptoLiquidacion 
	--FROM tb_ConceptosDeLiquidacion 
	--WHERE regimenLaboral = @regimenLaboral 
	--AND habilitado = 'S'  
	--AND ((@SituacionRevista IN (1,2,3) AND SUBSTRING(MesDePago, MONTH(@PHasta), 1) = '1') OR (@SituacionRevista IN (4) AND SUBSTRING(MesDePagoSuplentes, MONTH(@PHastaSuplentesComunes), 1) = '1' ) )
	--AND MomentoDeEjecucion = 1
	--ORDER BY OrdenDeEjecucion
	--
	IF @SituacionRevista IN (1,2,3)	
		FETCH FIRST FROM ConceptosaLiq INTO @Procedimiento, @idConcepto
	ELSE
		FETCH FIRST FROM ConceptosaLiqSuplentes INTO @Procedimiento, @idConcepto
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
		SELECT @sqlTemp = 'DECLARE @retorno decimal(18,4) '+char(10)
		-- @Desde y @Hasta tienen el valor de la cabecera segun situacion de revista
		SELECT @sqlTemp = @sqlTemp + 'EXEC '+@Procedimiento+ ' ' +CONVERT(VARCHAR, @AgenteL)+', '+CONVERT(VARCHAR, @idServicio)+', '+CONVERT(VARCHAR, @PlazaL)+', @retorno output, '+CONVERT(VARCHAR, @idLiquidacion) +', '+CONVERT(VARCHAR, @DiasALiquidar)+', '+CONVERT(VARCHAR, @DiasDelPeriodo)+', "'+CONVERT(VARCHAR(10),@Desde, 103)+'", "'+CONVERT(VARCHAR(10),@Hasta, 103)+'"'
		EXEC(@sqlTemp)
	
		--EXEC sp_executeSQL @sqlTemp, N'@Agente INT, @Servicio INT, @Plaza INT, @Resultado DECIMAL(18,4) OUTPUT, @IdLiquidacion INT,  @DiasALiquidar INT, @DiasDelPeriodo INT, @Desde DATETIME, @Hasta DATETIME',  @AgenteL, @idServicio, @PlazaL,  @IdLiquidacion, @Resultado, @IdLiquidacion, @DiasDelPeriodo, @Desde, @Hasta

		IF @SituacionRevista IN (1,2,3)	
			FETCH NEXT FROM ConceptosaLiq INTO @Procedimiento, @idConcepto
		ELSE
			FETCH NEXT FROM ConceptosaLiqSuplentes INTO @Procedimiento, @idConcepto
	END

	--CLOSE ConceptosaLiq
	--DEALLOCATE ConceptosaLiq

	

	FETCH NEXT FROM AgentesALiquidar INTO @agenteL, @FBajaL, @PlazaL, @idServicio,@LiqHasta, @LiqDesde, @SituacionRevista, @Liquidado
END

CLOSE ConceptosaLiq
DEALLOCATE ConceptosaLiq

CLOSE ConceptosaLiqSuplentes
DEALLOCATE ConceptosaLiqSuplentes

CLOSE AgentesALiquidar
DEALLOCATE AgentesALiquidar


-----------------------------------------------------   APORTES JUBILATORIOS y OBRA SOCIAL  --  para los que están debajo del Mínimo

--Lo Sacamos en Septiembre 2008 porque lo hacia mal y segun subsidios este importe lo tienen que sacar de lo que cobra el docente si decidio aportar el mínimo
/*
DECLARE @Servicio Int, @TotalRemunerativo Float, @idAgente Int, @Contribucion Float, @FechaHasta DATETIME, @SitRev INT

-- Contribucion Minimo Jubilatorio
DECLARE ServiciosJubilatorios Cursor For
	Select Servicio from tb_RegistroDeLiquidaciones RL Inner Join tb_AgentesConAportesMinimo AJ On AJ.Agente = RL.Agente
	Inner Join tb_Liquidaciones L On idLiquidacion = Liquidacion
	Inner Join tb_Organizaciones O On idOrganizaciones = L.Organizacion
	Where Liquidacion = @idLiquidacion And AportaMinimoJubilatorio = 'S' And Concepto = 10 And MontoDescuento > 0
	And O.Cuise = AJ.Cuise

Open ServiciosJubilatorios

Fetch Next From ServiciosJubilatorios Into @Servicio

While @@Fetch_Status = 0
Begin
	Select @idAgente = Agente, @SitRev = SituacionRevista From tb_ServiciosAgentes Where idServicioAgente = @Servicio

	--Agregado el 08/07/2006
--	SELECT @FechaHasta = CASE WHEN @SitRev = 4 THEN HastaSuplente ELSE Hasta END FROM tb_Liquidaciones INNER JOIN tb_Liqudiaciones ON IdCabeceraDeLiquidacion = IdCabeceraLiquidacion AND IdLiquidacion = @IdLiquidacion	
	SELECT @FechaHasta = CASE WHEN @SitRev = 4 THEN C.HastaSuplente ELSE C.Hasta END FROM tb_CabeceradeLiquidacion C INNER JOIN tb_Liquidaciones L  ON C.IdCabeceraDeLiquidacion = L.IdCabeceraLiquidacion AND IdLiquidacion = @IdLiquidacion	--Modificado Adriana 20-7

	SELECT @ImporteMinimoJubilatorio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteMinimoJubilatorio', @FechaHasta))
	SELECT @ImporteMinimoObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteMinimoObraSocial', @FechaHasta))
	SELECT @PorcentajeContribucionJubilatoria = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%ContribucionJubilatoriaPatronal', @FechaHasta))
	SELECT @PorcentajeContribucionObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%ContribucionObraSocialPatronal', @FechaHasta))
	SELECT @PorcentajeAporteJubilatorio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteJubilatorio', @FechaHasta))
	SELECT @PorcentajeAporteObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteObraSocial', @FechaHasta))
	--

	Select @TotalRemunerativo = sum(MontoHaberes) from tb_RegistroDeLiquidaciones, tb_ConceptosDeLiquidacion
 	where Liquidacion = @idLiquidacion and idConceptoLiquidacion = concepto and (tipo = 1 or tipo = 2) And Agente = @idAgente 

	If @TotalRemunerativo < @ImporteMinimoJubilatorio
	Begin
		Select @Contribucion = (@ImporteMinimoJubilatorio - @TotalRemunerativo) * ( @PorcentajeContribucionJubilatoria/100)

		Update tb_RegistroDeLiquidaciones Set MontoDescuento = (@ImporteMinimoJubilatorio * @PorcentajeAporteJubilatorio / 100) + @Contribucion Where Liquidacion = @idLiquidacion And Servicio = @Servicio And Concepto = 10
		SELECT @ErrorX = @@ERROR
		IF @ErrorX <> 0 
			INSERT tb_ErroresLiquidacion SELECT NULL Liquidacion, @idAgente  Agente, NULL Organizacion, @Servicio Servicio, NULL Concepto, GETDATE() Fecha, 'No se pudo asignar Minimo de Aporte Jubilatorio al Servicio' Diagnostico, @CabeceraDeLiquidacion, @ErrorX
	End	

	Fetch Next From ServiciosJubilatorios Into @Servicio
End 

Close ServiciosJubilatorios
Deallocate ServiciosJubilatorios


-- Contribucion Minimo Obra Social
DECLARE ServiciosObraSocial Cursor For
	Select Servicio from tb_RegistroDeLiquidaciones RL Inner Join tb_AgentesConAportesMinimo AJ On AJ.Agente = RL.Agente
	Inner Join tb_Liquidaciones L On idLiquidacion = Liquidacion
	Inner Join tb_Organizaciones O On idOrganizaciones = L.Organizacion
	Where Liquidacion = @idLiquidacion And AportaMinimoObraSocial = 'S' And Concepto = 13 And MontoDescuento > 0
	And O.Cuise = AJ.Cuise

Open ServiciosObraSocial

Fetch Next From ServiciosObraSocial Into @Servicio
While @@Fetch_Status = 0
Begin
	Select @idAgente = Agente, @SitRev = SituacionRevista From tb_ServiciosAgentes Where idServicioAgente = @Servicio

	--Agregado el 08/07/2006
	--SELECT @FechaHasta = CASE WHEN @SitRev = 4 THEN HastaSuplente ELSE Hasta END FROM tb_Liquidaciones INNER JOIN tb_Liqudiaciones ON IdCabeceraDeLiquidacion = IdCabeceraLiquidacion AND IdLiquidacion = @IdLiquidacion	
	SELECT @FechaHasta = CASE WHEN @SitRev = 4 THEN C.HastaSuplente ELSE C.Hasta END 
	FROM tb_CabeceradeLiquidacion C INNER JOIN tb_Liquidaciones L ON C.IdCabeceraDeLiquidacion = L.IdCabeceraLiquidacion AND IdLiquidacion = @IdLiquidacion	--Modificado Adriana 20-7


	SELECT @ImporteMinimoJubilatorio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteMinimoJubilatorio', @FechaHasta))
	SELECT @ImporteMinimoObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImporteMinimoObraSocial', @FechaHasta))
	SELECT @PorcentajeContribucionJubilatoria = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%ContribucionJubilatoriaPatronal', @FechaHasta))
	SELECT @PorcentajeContribucionObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%ContribucionObraSocialPatronal', @FechaHasta))
	SELECT @PorcentajeAporteJubilatorio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteJubilatorio', @FechaHasta))
	SELECT @PorcentajeAporteObraSocial = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%AporteObraSocial', @FechaHasta))
	--

	Select @TotalRemunerativo = sum(MontoHaberes) from tb_RegistroDeLiquidaciones, tb_ConceptosDeLiquidacion
 	where Liquidacion = @idLiquidacion and idConceptoLiquidacion = concepto and (tipo = 1 or tipo = 2) And Agente = @idAgente

	Select @Contribucion = (@ImporteMinimoObraSocial - @TotalRemunerativo) * (@PorcentajeContribucionObraSocial/100)

	Update tb_RegistroDeLiquidaciones Set MontoDescuento = (@ImporteMinimoObraSocial * @PorcentajeAporteObraSocial / 100) + @Contribucion Where Liquidacion = @idLiquidacion And Servicio = @Servicio And Concepto = 13
	SELECT @ErrorX = @@ERROR
	IF @ErrorX <> 0 
		INSERT tb_ErroresLiquidacion SELECT NULL Liquidacion, @idAgente  Agente, NULL Organizacion, @Servicio Servicio, NULL Concepto, GETDATE() Fecha, 'No se pudo asignar Minimo de Aporte a Obra Social al Servicio' Diagnostico, @CabeceraDeLiquidacion, @ErrorX	

	Fetch Next From ServiciosObraSocial Into @Servicio
End 

Close ServiciosObraSocial
Deallocate ServiciosObraSocial
*/

UPDATE tb_Liquidaciones SET LiquidacionCompleta = 'S' WHERE IdLiquidacion = @IdLiquidacion
GO
